/**
 * 日志工具类
 * 只在开发环境输出日志，生产环境自动关闭
 *
 * 使用方法：
 *
 * 方式一：全局使用（推荐）
 * 已在 main.js 中全局挂载，可直接使用：
 * - Vue 组件中：this.$log.log('日志内容')
 * - 非 Vue 文件中（utils/api/store等）：Logger.log('日志内容')（通过 window.Logger 全局挂载）
 *
 * 方式二：按需导入
 * import Logger from '@/utils/logger'
 * Logger.log('普通日志')
 *
 * 常用方法：
 * Logger.log('普通日志')       - 普通日志
 * Logger.info('信息日志')      - 信息日志
 * Logger.warn('警告日志')      - 警告日志
 * Logger.error('错误日志')     - 错误日志（生产环境也输出）
 * Logger.debug('调试日志')     - 调试日志
 * Logger.success('成功')       - 成功日志（带样式）
 * Logger.fail('失败')          - 失败日志（带样式）
 * Logger.table([data])         - 表格形式展示数据
 * Logger.group('标题', () => { Logger.log('内容') }) - 分组日志
 * Logger.time('label')         - 计时开始
 * Logger.timeEnd('label')      - 计时结束
 */

const isDev = process.env.NODE_ENV === 'development'

class Logger {
  /**
   * 普通日志
   */
  static log(...args) {
    if (isDev) {
      console.log(...args)
    }
  }

  /**
   * 信息日志
   */
  static info(...args) {
    if (isDev) {
      console.info(...args)
    }
  }

  /**
   * 警告日志
   */
  static warn(...args) {
    if (isDev) {
      console.warn(...args)
    }
  }

  /**
   * 错误日志（生产环境也输出，用于错误追踪）
   */
  static error(...args) {
    console.error(...args)
  }

  /**
   * 调试日志
   */
  static debug(...args) {
    if (isDev) {
      console.debug(...args)
    }
  }

  /**
   * 表格日志
   */
  static table(data) {
    if (isDev) {
      console.table(data)
    }
  }

  /**
   * 调试日志组
   */
  static group(title, callback) {
    if (isDev) {
      console.group(title)
      if (callback) callback()
      console.groupEnd()
    }
  }

  /**
   * 折叠的调试日志组
   */
  static groupCollapsed(title, callback) {
    if (isDev) {
      console.groupCollapsed(title)
      if (callback) callback()
      console.groupEnd()
    }
  }

  /**
   * 计时开始
   */
  static time(label) {
    if (isDev) {
      console.time(label)
    }
  }

  /**
   * 计时结束
   */
  static timeEnd(label) {
    if (isDev) {
      console.timeEnd(label)
    }
  }

  /**
   * API请求日志
   */
  static apiRequest(method, url, params) {
    if (isDev) {
      console.log(`%c[API请求] ${method.toUpperCase()} ${url}`, 'color: #1890ff; font-weight: bold')
      if (params) {
        console.log('请求参数:', params)
      }
    }
  }

  /**
   * API响应日志
   */
  static apiResponse(url, status, data) {
    if (isDev) {
      const color = status >= 200 && status < 300 ? '#52c41a' : '#f5222d'
      console.log(`%c[API响应] ${status} ${url}`, `color: ${color}; font-weight: bold`)
      console.log('响应数据:', data)
    }
  }

  /**
   * API错误日志
   */
  static apiError(url, status, error) {
    if (isDev) {
      console.log(`%c[API错误] ${status || 'Network Error'} ${url}`, 'color: #f5222d; font-weight: bold')
      console.error('错误详情:', error)
    }
  }

  /**
   * 格式化日志（带样式）
   */
  static format(message, style = 'color: #333; font-weight: bold') {
    if (isDev) {
      console.log(`%c${message}`, style)
    }
  }

  /**
   * 成功日志
   */
  static success(...args) {
    if (isDev) {
      console.log('%c✓ Success', 'color: #52c41a; font-weight: bold', ...args)
    }
  }

  /**
   * 失败日志
   */
  static fail(...args) {
    if (isDev) {
      console.log('%c✗ Failed', 'color: #f5222d; font-weight: bold', ...args)
    }
  }
}

export default Logger

